package proj.reseau;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Fichiers {

	List<Fichier> fichiers_seeds;
	List<Fichier> fichiers_leeches;

	Fichiers(Config conf) {
		String seeds_repo_name = conf.getProperty("seeds-directory");
		File repertoire = new File(seeds_repo_name);
		String[] t = repertoire.list();
		fichiers_seeds = new ArrayList<Fichier>();
		for (String s : t) {
			File f = new File(seeds_repo_name + "/" + s);
			if (f.isFile()) {
				try {
					int pieceSize = conf.getSeedFilePieceSize(s);
					Fichier fichier = new Fichier(seeds_repo_name+"/"+s,s, f.length(), MD5
							.encode(seeds_repo_name + "/" + s), pieceSize);
					fichier.setSeedBuffMap();
					fichiers_seeds.add(fichier);
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		String leech_repo_name = conf.getProperty("leeches-directory");
		repertoire = new File(leech_repo_name);
		t = repertoire.list();
		fichiers_leeches = new ArrayList<Fichier>();
		for (String s : t) {
			File f = new File(leech_repo_name + "/" + s);
			if (f.isFile()) {
				try {
					int pieceSize = conf.getLeechPieceSize(s);
					String md5 = conf.getLeechMD5(s);
					fichiers_leeches.add(new Fichier(leech_repo_name+"/"+s,s, f.length(), md5,
							pieceSize));
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}

		for (Fichier f : fichiers_seeds) {
			System.out.println(f.toString());
		}
	}

	@Override
	public String toString() {
		return "Fichiers [fichiers_seeds=" + fichiers_seeds
				+ ", fichiers_leeches=" + fichiers_leeches + "]";
	}
	
	public void addLeech(Fichier f)
	{
		this.fichiers_leeches.add(f);
	}
	
	public void addSeed(Fichier f)
	{
		this.fichiers_seeds.add(f);
	}
	
	public void removeLeech(Fichier f)
	{
		fichiers_leeches.remove(f);
	}
	
	public void removeSeed(Fichier f)
	{
		fichiers_seeds.remove(f);
	}

	public String getFormatedSeedsList() {
		String s = "";
		boolean first = true;
		for (Fichier f : fichiers_seeds) {
			if (first) {
				s += f.getFormatedString();
				first = false;
			} else {
				s += " " + f.getFormatedString();
			}
		}
		return s;
	}
	
	public String getFormatedSeedsKeyList()
	{
		String s = "";
		boolean first = true;
		for (Fichier f : fichiers_seeds) {
			if (first) {
				s += f.getKey();
				first = false;
			} else {
				s += " " + f.getKey();
			}
		}
		return s;
	}
	
	public String getFormatedLeechesKeyList()
	{
		String s = "";
		boolean first = true;
		for (Fichier f : fichiers_leeches) {
			if(!f.getKey().equals(""))
			{
				if (first) {
					s += f.getKey();
					first = false;
				} else {
					s += " " + f.getKey();
				}
			}
		}
		return s;
	}
	
	
	public Fichier getFichier(String key)
	{
		for(Fichier f:fichiers_seeds)
		{
			if(f.getKey().equals(key))
			{
				return f;
			}
		}
		for(Fichier f:fichiers_leeches)
		{
			if(f.getKey().equals(key))
			{
				return f;
			}
		}
		return null;
	}

}
